package com.situ.user.config;

import com.situ.user.service.PicService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.io.File;
import java.util.List;

/**
 * 使用Spring自带的定时任务
 */
@Component
@EnableScheduling
public class CleanPicTask {

    @Value("${spring.servlet.multipart.location}")
    private String path;
    @Autowired
    private PicService picService;

    /**
     * 清理无用图片
     */
    @Scheduled(cron = "0 30 14 * * ?") //定义一个方法，作为定时任务
    /**
     * cron设置一个表达式，指定在什么时间执行
     *      秒 分 时 日 月 周 年
     *      *
     *      0 0 1 * * ?
     */
    public void cleanPic() {
        System.out.println("定时清理图片");

        // 1.要清理的图片在哪里
        File picDir = new File(path);

        File[] pics = picDir.listFiles();
        // 查询出当前系统下所有的可用图片
        List<String> picList=picService.getAll();

        // 遍历这些图片，检查它们是不是需要清理
        for (File pic : pics) {
            if (pic.isFile()) {
                String picName = pic.getName();
                // 查询该图片是否需要清理
                // 图片可能被哪些地方使用
                if (!picList.contains(picName)){
                    // 从文件夹中删除该文件

                    pic.delete();
                }
            }

        }
    }

    @Scheduled(fixedDelay = 24 * 60 * 60 * 1000)
    /**
     * fixedDelay 设置定时任务的固定时间间隔
     * 单位是毫秒
     * 当项目启动后，第一次执行每隔指定的时间间隔就再次执行
     */
    public void tesr() {
        System.err.println("定时任务");
    }
}
